﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <assert.h>

struct s
{
	int i;
	int arr[];
};

int main()
{
	struct s* p1 = (struct s*)malloc(sizeof(struct s) + 5 * sizeof(int));
	if (p1 == NULL)
	{
		perror(malloc);
		return 1;
	}
	//使用
	p1->i = 100;
	for (int i = 0; i < 5; i++)
	{
		p1->arr[i] = i;
	}
	//扩容
	realloc(p1, sizeof(struct s) + 10 * sizeof(int));
	if (p1 == NULL)
	{
		perror(realloc);
		return 1;
	}
	for (int i = 5; i < 10; i++)
	{
		p1->arr[i] = i;
	}
	return 0;
}

//
//int main()
//{
//	int a[4] = { 1,2,3,4 };
//	int* ptr1 = (int*)(& a + 1);
//	int* ptr2 = (int*)((int)a + 1);
//	printf("%#x,%#x", ptr1[-1], *ptr2);
//	return 0;
//}

//typedef union r
//{
//	char i;
//	int p;
//}ret;
//
//int main()
//{
//	ret kyt;
//	kyt.p = 1;
//	if (kyt.i == 1)
//		printf("小端");
//	else
//		printf("大端\n");
//	return 0;
//}
// 
// 
// 
//int php_syst()
//{
//	int i = 1;
//	char* p1 = (char*)&i;
//	return *p1;
//}
//
//int main()
//{
//	int i = php_syst();
//	if (i = 1)printf("小端\n");
//	else printf("大端\n");
//	return 0;
//}

 //atoi函数模拟
//int  my_atoi(char * ptr1)
//{
//	int n, flage;
//	n = flage = 0;
//	while (isspace(*ptr1))
//		ptr1++;
//	switch (*ptr1)
//	{
//	case '-':flage = 1;
//	case '+':ptr1++;
//	}
//	while (isdigit(*ptr1))
//		n = n * 10 - (*ptr1++ - '0');
//	return flage ? n : -n;
//}
//
//int main()
//{
//	char a[20] = { ' ','+','4','6','9' };
//	printf("%d\n", my_atoi(a));
//	return 0;
//}

//int main()
//{
//	int * p1 = (int *)malloc(20);
//	if (p1 = NULL)
//	{
//		perror(malloc);
//		return 1;
//	}
//	for (int i = 0; i < 5; i++)
//		*(p1 + i) = i + 1;
//	int ptr1 = realloc(p1, 40);
//	if (ptr1 = NULL)
//	{
//		perror(realloc);
//		return 1;
//	}
//	else
//	{
//		p1 = ptr1;
//		for (int i = 5; i < 9; i++)
//			*(p1 + i) = i + 1;
//	}
//	return 0;
//}

//int main()
//{
//	//用malloc函数先创建
//	int * p = (int *)malloc(20);
//	for (int i = 0; i < 5; i++)
//		*(p + i) = i + 1;
//	int * ptr = (int *)realloc(p, 40);
//	if (ptr != NULL)
//	{
//		p = ptr;
//		for (int i = 5; i < 9; i++)
//			*(p + i) = i + 1;
//	}
//	else
//	{
//		perror(realloc);
//	}
//	return 0;
//}

//int main()
//{
//	int* p1 = (int*)malloc(20);//malloc -- 向内存申请空间。
//	if (p1 = NULL)
//		printf("%d \n", perror);
//	for (int i = 0; i < 5; i++)
//	{
//		*(p1 + i) = i + 1;
//	}
//	return 0;
//}

//typedef union r
//{
//	char i;
//	int b;
//}ret;
//
//int main()
//{
//	ret A;
//	A.b = 1;
//	printf("%d\n", A.i);
//	return 0;
//}

//union ret
//{
//	char i[7];
//	int m;
//};
//int main()
//{
//	printf("%zd", sizeof(union ret));
//	return 0;
//}

//int main()
//{
//	printf("%d\n", 6%-4);//&有0则0；全1才1；|按位或：       有1则1；全0才0；        ^异或：同0异1；
//
//	return 0;
//}
//&有0则0；全1才1； | 按位或：       有1则1；全0才0； ^ 异或：同0异1；
//int check_sys()
//{
//	int i = 1;
//	return (*(char*)&i);
//}
//int main()
//{
//	int ret = check_sys();
//	if (ret == 1)
//	{
//		printf("⼩端\n");
//	}
//	else
//	{
//		printf("⼤端\n");
//	}
//	return 0;
//}

//int main()
//{
//	int i = 1;
//	char* p1 = (char*)&i;
//	printf("%d\n", *p1);
//	return 0;
//}

//typedef struct ret
//{
//	int money;
//	char ret[20];
//}ret;
//
//int main()
//{
//	ret i = { .money = 20,.ret = "int nnnn" };
//	ret* p1 = &i;
//	printf("%d\n", p1->money);
//	return 0;
//}

//struct ret//加不加都可以
//{
//	int _id;
//	char _name[20];
//	char _book[20];
//}book_one;
//
//int main()
//{
//	//struct ret book_one = {.book}
//	//初始化
//	/*struct ret book_one = { .id = 1200,.book = "百年孤独",.name = "马斯克" };
//	struct ret* p1 = &book_one;
//	printf("%s\n", p1 ->book);*/
//	printf("%zd\n", sizeof(struct ret));
//	return 0;
//}

//int main()
//{
//	int n = 9;
//	float* p1 = (float*)&n;
//	//  0 00000000 00000000000000000001001 9的补码;
//	//  站在float的角度来看9的补码(-1)^0*0.00000000000000000001001*2^(1-127);
//	printf("%f\n", *p1);
//	return 0;
//}

//int main()
//{
//	int n = 9;// s e m
//	//1001.0    0100 0001 0001 0000 0000 0000 0000 0000
//	//          41 10 00 00 // 00 00 10 41 // 00 00 00 09   //  
//	float m = 9.0;
//	printf("%f\n", n);
//	return 0;
//}

//int main()
//{
//	int a[4] = {1,2,3,4};
//	int* ptr1 = (int*)(&a + 1);
//	int* ptr2 = (int*)((int)a + 1);
//	printf("%x %x", ptr1[-1], *ptr2);
//	return 0;
//}
//
